Importance of Program.cs and Startup.cs files in ASP.NET Core

Program.cs और Startup.cs फ़ाइलों का महत्व

ASP.NET Core वेब एप्लीकेशन में दो प्रमुख फाइलें मिलती हैं: Program.cs और Startup.cs। इसके पीछे सेपरेशन ऑफ कंसर्न (Separation of Concern) की बात है।

Program.cs फाइल के भीतर एप्लीकेशन के इन्फ्रास्ट्रक्चर का कॉन्फ़िगरेशन होता है, जो कि आमतौर पर स्थायी होता है। उदाहरण के लिए, अगर आप API डेवलप कर रहे हैं तो उसके लिए जो इन्फ्रास्ट्रक्चर चाहिए और MVC एप्लीकेशन डेवलप कर रहे हैं तो उसके लिए जो इन्फ्रास्ट्रक्चर चाहिए, दोनों में थोड़ा सा अंतर होता है।

इसके बाद बात आती है कि आपका जो एप्लीकेशन का स्पेसिफिक बिहेवियर है, उससे संबंधित जो कंपोनेंट है, उसको हम Startup.cs फाइल में रखते हैं। जैसे कि Startup.cs फाइल के भीतर हम सर्विसेज की कॉन्फ़िगरेशन रखते हैं और मिडिलवेयर पाइपलाइन को डिफाइन करते हैं।

एप्लीकेशन का इन्फ्रास्ट्रक्चर आमतौर पर स्थायी होता है, उसमें किसी भी प्रकार का परिवर्तन एप्लीकेशन के लाइफटाइम में नहीं किया जाता है। उदाहरण के लिए, HTTP सर्वर जैसे केस्ट्रल (Kestrel), कंटेंट रूट, IIS इंटीग्रेशन, लॉगिंग और दूसरे तरह के एप्लीकेशन की सेटिंग जैसे कनेक्शन स्ट्रिंग, यूजरनेम, पासवर्ड इत्यादि, ये सारे इन्फ्रास्ट्रक्चर के अंतर्गत आते हैं। प्रोजेक्ट की पूरी लाइफटाइम में किसी प्रकार का इसमें परिवर्तन की संभावना बहुत कम होती है।

इसके विपरीत, अगर हम Startup.cs फाइल की बात करें तो उसमें जो हम कॉन्फ़िगरेशन एप्लीकेशन का करते हैं, वह आमतौर पर एप्लीकेशन के बिहेवियर से संबंधित कॉन्फ़िगरेशन होता है जो परिवर्तनशील होता है। उदाहरण के लिए, आप डिपेंडेंसी इंजेक्शन, मिडिलवेयर पाइपलाइन या MVC कॉन्फ़िगरेशन के बारे में विचार कीजिए तो यह कॉन्फ़िगरेशन परिवर्तनशील है।

Program.cs फाइल के भीतर एप्लीकेशन का मूलभूत कॉन्फ़िगरेशन किया जाता है। इसके लिए वेब होस्ट बिल्डर (Web Host Builder) ऑब्जेक्ट क्रिएट किया जाता है। ज्यादातर कॉन्फ़िगरेशन आपको Program.cs फाइल में दिखाई नहीं देता है, वह CreateDefaultBuilder मेथड के पीछे छुपा होता है। Program.cs फाइल में इसको कॉल करते हैं, न कि उसके डेफिनेशन को हम देख रहे होते हैं।

CreateDefaultBuilder मेथड के पीछे हम बिल्डर डिजाइन पैटर्न (Builder Design Pattern) का उपयोग करते हैं। इस पैटर्न के अनुसार, सबसे पहले हम वेब होस्ट बिल्डर ऑब्जेक्ट की कॉन्फ़िगरेशन पहले कर लेते हैं। सारी कॉन्फ़िगरेशन करने के बाद बिल्ड मेथड (Build Method) को कॉल करके हम कॉन्फ़िगरेशन को कंप्लीट करते हैं। लेकिन यह एप्लीकेशन अभी भी HTTP रिक्वेस्ट को हैंडल नहीं कर सकता है। दूसरे शब्दों में, यह HTTP रिक्वेस्ट को लिसन नहीं करता है। इसके लिए हमें रन मेथड (Run Method) को कॉल करना होता है। रन मेथड को कॉल करने के बाद हमारा एप्लीकेशन HTTP रिक्वेस्ट को सुनने लगता है और किसी भी रिक्वेस्ट को हैंडल करने के लिए पूरी तरह तैयार हो जाता है।

यदि एप्लीकेशन के इन्फ्रास्ट्रक्चर का कॉन्फ़िगरेशन और एप्लीकेशन के बिहेवियर के कॉन्फ़िगरेशन के बीच में अंतर स्पष्ट नहीं है, तो इसे आप इस तरह समझें कि जैसे एक मनुष्य का शरीर है, तो वह उसका इन्फ्रास्ट्रक्चर हुआ, जबकि उसका बिहेवियर दूसरा चीज हुआ। ठीक इसी तरह आपकी एप्लीकेशन का कुछ बेसिक इन्फ्रास्ट्रक्चर होता है, उस इन्फ्रास्ट्रक्चर को हम Program.cs फाइल के भीतर डिफाइन और कॉन्फ़िगर करते हैं, जबकि हम एप्लीकेशन के बिहेवियर को Startup.cs फाइल के भीतर मिडिलवेयर के रूप में या सर्विस के रूप में डिफाइन करते हैं।

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks